import { IPSControl } from './ipscontrol';
import { IPSControlAction } from './ipscontrol-action';
import { IPSControlNavContext } from './ipscontrol-nav-context';
import { IPSControlNavParam } from './ipscontrol-nav-param';
import { IPSDEDataExport } from '../dataentity/dataexport/ipsdedata-export';
import { IPSDEDataImport } from '../dataentity/dataimport/ipsdedata-import';

/**
 *
 * 子接口类型识别属性[]
 * @export
 * @interface IPSMDControl
 */
export interface IPSMDControl extends IPSControl {
  /**
   * 建立数据行为
   *
   * @type {IPSControlAction}
   */
  getCreatePSControlAction(): IPSControlAction | null;

  /**
   * 建立数据行为
   *
   * @type {IPSControlAction}
   */
  get createPSControlAction(): IPSControlAction | null;

  /**
   * 建立数据行为（必须存在）
   *
   * @type {IPSControlAction}
   */
  getCreatePSControlActionMust(): IPSControlAction;

  /**
   * 查询数据行为
   *
   * @type {IPSControlAction}
   */
  getFetchPSControlAction(): IPSControlAction | null;

  /**
   * 查询数据行为
   *
   * @type {IPSControlAction}
   */
  get fetchPSControlAction(): IPSControlAction | null;

  /**
   * 查询数据行为（必须存在）
   *
   * @type {IPSControlAction}
   */
  getFetchPSControlActionMust(): IPSControlAction;

  /**
   * 获取草稿数据行为（拷贝）
   *
   * @type {IPSControlAction}
   */
  getGetDraftFromPSControlAction(): IPSControlAction | null;

  /**
   * 获取草稿数据行为（拷贝）
   *
   * @type {IPSControlAction}
   */
  get getDraftFromPSControlAction(): IPSControlAction | null;

  /**
   * 获取草稿数据行为（拷贝）（必须存在）
   *
   * @type {IPSControlAction}
   */
  getGetDraftFromPSControlActionMust(): IPSControlAction;

  /**
   * 获取草稿数据行为
   *
   * @type {IPSControlAction}
   */
  getGetDraftPSControlAction(): IPSControlAction | null;

  /**
   * 获取草稿数据行为
   *
   * @type {IPSControlAction}
   */
  get getDraftPSControlAction(): IPSControlAction | null;

  /**
   * 获取草稿数据行为（必须存在）
   *
   * @type {IPSControlAction}
   */
  getGetDraftPSControlActionMust(): IPSControlAction;

  /**
   * 获取数据行为
   *
   * @type {IPSControlAction}
   */
  getGetPSControlAction(): IPSControlAction | null;

  /**
   * 获取数据行为
   *
   * @type {IPSControlAction}
   */
  get getPSControlAction(): IPSControlAction | null;

  /**
   * 获取数据行为（必须存在）
   *
   * @type {IPSControlAction}
   */
  getGetPSControlActionMust(): IPSControlAction;

  /**
   * 部件导航上下文集合
   *
   * @type {IPSControlNavContext[]}
   */
  getPSControlNavContexts(): IPSControlNavContext[] | null;

  /**
   * 部件导航上下文集合
   *
   * @type {IPSControlNavContext[]}
   */
  get psControlNavContexts(): IPSControlNavContext[] | null;

  findPSControlNavContext(objKey: any): IPSControlNavContext | null;

  /**
   * 部件导航参数集合
   *
   * @type {IPSControlNavParam[]}
   */
  getPSControlNavParams(): IPSControlNavParam[] | null;

  /**
   * 部件导航参数集合
   *
   * @type {IPSControlNavParam[]}
   */
  get psControlNavParams(): IPSControlNavParam[] | null;

  findPSControlNavParam(objKey: any): IPSControlNavParam | null;

  /**
   * 数据导出对象
   *
   * @type {IPSDEDataExport}
   */
  getPSDEDataExport(): IPSDEDataExport | null;

  /**
   * 数据导出对象
   *
   * @type {IPSDEDataExport}
   */
  get psDEDataExport(): IPSDEDataExport | null;

  /**
   * 数据导出对象（必须存在）
   *
   * @type {IPSDEDataExport}
   */
  getPSDEDataExportMust(): IPSDEDataExport;

  /**
   * 数据导入对象
   *
   * @type {IPSDEDataImport}
   */
  getPSDEDataImport(): IPSDEDataImport | null;

  /**
   * 数据导入对象
   *
   * @type {IPSDEDataImport}
   */
  get psDEDataImport(): IPSDEDataImport | null;

  /**
   * 数据导入对象（必须存在）
   *
   * @type {IPSDEDataImport}
   */
  getPSDEDataImportMust(): IPSDEDataImport;

  /**
   * 删除数据行为
   *
   * @type {IPSControlAction}
   */
  getRemovePSControlAction(): IPSControlAction | null;

  /**
   * 删除数据行为
   *
   * @type {IPSControlAction}
   */
  get removePSControlAction(): IPSControlAction | null;

  /**
   * 删除数据行为（必须存在）
   *
   * @type {IPSControlAction}
   */
  getRemovePSControlActionMust(): IPSControlAction;

  /**
   * 更新数据行为
   *
   * @type {IPSControlAction}
   */
  getUpdatePSControlAction(): IPSControlAction | null;

  /**
   * 更新数据行为
   *
   * @type {IPSControlAction}
   */
  get updatePSControlAction(): IPSControlAction | null;

  /**
   * 更新数据行为（必须存在）
   *
   * @type {IPSControlAction}
   */
  getUpdatePSControlActionMust(): IPSControlAction;

  /**
   * 只读模式
   * @type {boolean}
   * @default false
   */
  readOnly: boolean;
}
